Buefy is a UI framework that’s based on Bulma.
In this article, we’ll look at how to use Buefy in our Vue app.
Switch
Buefy provides a switch component for us to use.
For example, we can write:
<template>
<section>
<div class="field">
<b-switch>Default</b-switch>
</div>
</section>
</template>
<script>
export default {
data() {
return {};
}
};
</script>
We can bind the value withv-model :
<template>
<section>
<div class="field">
<b-switch v-model="isSwitched">{{ isSwitched }}</b-switch>
</div>
</section>
</template>
<script>
export default {
data() {
return { isSwitched: false };
}
};
</script>
the type prop lets us change the style:
<template>
<section>
<div class="field">
<b-switch v-model="isSwitched" type="is-success">{{ isSwitched }}</b-switch>
</div>
</section>
</template>
<script>
export default {
data() {
return { isSwitched: false };
}
};
</script>
The size prop changes the size:
<template>
<section>
<div class="field">
<b-switch v-model="isSwitched" size="is-large">{{ isSwitched }}</b-switch>
</div>
</section>
</template>
<script>
export default {
data() {
return { isSwitched: false };
}
};
</script>
Also, we can set the rounded prop to false to make it square:
<template>
<section>
<div class="field">
<b-switch v-model="isSwitched" :rounded="false">{{ isSwitched }}</b-switch>
</div>
</section>
</template>
<script>
export default {
data() {
return { isSwitched: false };
}
};
</script>
The outlined prop makes it outlined:
<template>
<section>
<div class="field">
<b-switch v-model="isSwitched" outlined>{{ isSwitched }}</b-switch>
</div>
</section>
</template>
<script>
export default {
data() {
return { isSwitched: false };
}
};
</script>
Tag Input
We can add tag input with the b-taginput component.
For example, we can write:
<template>
<section>
<div class="field">
<b-taginput v-model="tags" ellipsis placeholder="Add a tag"></b-taginput>
{{tags}}
</div>
</section>
</template>
<script>
export default {
data() {
return { tags: [] };
}
};
</script>
We bind the entered tags to an array of strings with v-model .
ellipsis truncates long tag text and adds an ellipsis after it.
Autocomplete
We can add the autocomplete prop to add the autocomplete values:
<template>
<section>
<div class="field">
<b-taginput v-model="tags" :data="filteredTags" autocomplete placeholder="Add a tag"></b-taginput>
{{tags}}
</div>
</section>
</template>
<script>
export default {
data() {
return { tags: [], filteredTags: ["foo", "bar", "baz"] };
}
};
</script>
data has an array of strings with the choices we can choose from.
autocomplete enables the autocomplete dropdown.
Templated Autocomplete
We can populate the default slot to change the template for the autocomplete control:
<template>
<section>
<div class="field">
<b-taginput v-model="tags" :data="filteredTags" autocomplete placeholder="Add a tag">
<template slot-scope="props">
<strong>{{props.option}}</strong>
</template>
<template slot="empty">There are no items</template>
</b-taginput>
{{tags}}
</div>
</section>
</template>
<script>
export default {
data() {
return { tags: [], filteredTags: ["foo", "bar", "baz"] };
}
};
</script>
props.option has the item that we can select.
Customize Selected Item
We can customize the selected item by populating the selected slot:
<template>
<section>
<div class="field">
<b-taginput
ref="tagInput"
v-model="tags"
:data="filteredTags"
autocomplete
placeholder="Add a tag"
>
<template slot="selected" slot-scope="props">
<b-tag
v-for="(tag, index) in props.tags"
:key="index"
type="is-success"
rounded
:tabstop="false"
ellipsis
closable
@close="$refs.tagInput.removeTag(index, $event)"
>{{tag}}</b-tag>
</template>
</b-taginput>
{{tags}}
</div>
</section>
</template>
<script>
export default {
data() {
return { tags: [], filteredTags: ["foo", "bar", "baz"] };
}
};
</script>
We set the type to change the style.
is-success makes the tags green.
closable shows the close button so we can remove it.
The b-tag emits the close event so we can remove the entry when we click the close button.
Conclusion
We can add switches and tag inputs with Buefy.